package com.geor.gcv.core.util;

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;

/**
 * 对文件进行操作
 * 
 * @author geor.lusongnan
 *
 */
public class FileTool {

	public static String getFileName(File file) {
		return file.getName().replaceAll("[.][^.]+$", "");
	}

	public static File[] getImageFiles(File root) {
		File files[] = root.listFiles(new FileFilter() {
			@Override
			public boolean accept(File file) {
				return isImage(file);
			}
		});
		return files;
	}

	public static boolean isImage(File file) {
		return file.getName().endsWith(".png") || file.getName().endsWith(".jpg") || file.getName().endsWith(".jpeg")
				|| file.getName().endsWith(".bmp") || file.getName().endsWith(".gif");
	}

	/**
	 * 获得目录下的文件
	 * 
	 * @param path
	 * @return
	 */
	public static File[] getFileByDir(String path) {
		File paths = new File(path);

		if (!paths.isDirectory()) {
			throw new RuntimeException("路径错误!?");
		}

		return paths.listFiles();
	}

	/**
	 * 创建目录
	 * 
	 * @param dir
	 *            目录的父目录
	 * @param num
	 *            个数
	 */
	public static void createDir(String dir, int num) {
		File file = new File(dir);
		if (!file.isDirectory())
			return;
		for (int i = 0; i < num; i++) {
			String path = file.getAbsolutePath() + "\\" + i;
			File dirs = new File(path);
			if (!dirs.exists())
				dirs.mkdirs();
		}
	}

	/**
	 * 没有过滤器的获取目下所有文件
	 * 
	 * @param dirs
	 * @return
	 */
	public static List<File> getDirFile(File dirs) {
		return getDirFile(dirs, new FileFilter() {
			@Override
			public boolean accept(File pathname) {
				return true;
			}
		});
	}

	/**
	 * 根据过滤器
	 * 
	 * @param dirs
	 * @param fileFilter
	 * @return
	 */
	public static List<File> getDirFile(File dirs, FileFilter fileFilter) {
		if (!dirs.exists()) {
			return null;
		}
		List<File> files = new ArrayList<File>();

		if (dirs.isDirectory()) {
			File fs[] = dirs.listFiles(fileFilter);
			for (File file : fs) {
				List<File> temps = getDirFile(file, fileFilter);
				files.addAll(temps);
			}
		} else if (dirs.isFile()) {
			files.add(dirs);
		}
		return files;
	}

	/**
	 * 重命名
	 * 
	 * @param file
	 * @param name
	 */
	public static void rename(File file, String name) {
		file.renameTo(new File(file.getParent(), name));
	}

}
